#ifndef _E_PH_CONTROLLER_H_
#define _E_PH_CONTROLLER_H_

#include <NxCharacter/NxController.h>
#include <NxCharacter/NxCapsuleController.h>

#include "EVector.h"
#include "ePhCollisionsGroups.h"

#include "eH.h"
namespace engine
{
class EPhControllerDesc
{
public:
  EVector       m_vPosition;

  EPhControllerDesc();

  virtual const NxControllerDesc&   getNxControllerDesc() const = 0;
};
//------------------------------------------------------------
class EPhCapsuleControllerDesc : public EPhControllerDesc
{
  mutable NxCapsuleControllerDesc     m_NxCapsuleControllerDesc;
public:
  float         m_fRadius;
  float         m_fHeight;

  EPhCapsuleControllerDesc();

  virtual const NxControllerDesc&   getNxControllerDesc() const;
};

//------------------------------------------------------------
class EPhController
{
  NxController*       m_pNxController;
public:
  EPhController( NxController& controller );

  EVector                  getPosition() const;
  inline NxController*     getNxControllerPtr() const { return m_pNxController; }
  void                     move(const EVector& vDisplacement, _ePhCollisionGroup eCollisionGroup );
};
//------------------------------------------------------------

} // end namespace

#endif